home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / bf_compact-bdb < prev    next >
Text File  |  2009-06-05  |  2KB  |  99 lines

  1. #! /bin/sh
  2.  
  3. #  bf_compact source_dir [wordlist_name...]
  4. #
  5. #    use to compact wordlist.db
  6. #    replaces original directory with new one
  7. #    renames original directory with '.old' extension
  8.  
  9. # $Id: bf_compact.in 6749 2008-10-15 23:08:06Z clint $
  10.  
  11. set -e # die on errors
  12.  
  13. : ${BOGOFILTER:=bogofilter}
  14. : ${BOGOUTIL:=bogoutil}
  15.  
  16. if [ -z "$1" ] ; then
  17.     echo 'usage: bf_compact source_dir [wordlist_name...]'
  18.     exit 1
  19. fi
  20.  
  21. # extract home directory
  22. BOGOHOME="$1"
  23. shift
  24.  
  25. if [ ! -d "$BOGOHOME" ] ; then
  26.     echo "$BOGOHOME must be a directory, not a file"
  27.     exit 1
  28. fi
  29.  
  30. # strip trailing slashes
  31. while true; do
  32.     case "$BOGOHOME" in
  33.     */) BOGOHOME=${BOGOHOME%/} ;;
  34.     *)  break ;;
  35.     esac
  36. done
  37.  
  38. export BOGOHOME
  39.  
  40. # find wordlists
  41. if [ -n "$1" ] ; then
  42.     FILES="$@"
  43. else
  44.     DIR=$($BOGOFILTER -QQ | grep ^bogofilter_dir | awk '{print $3}')
  45.     if [ "$BOGOHOME" != "$DIR" ] ; then
  46.     FILES=$(ls "$BOGOHOME"/*.db)
  47.     else
  48.     FILES=$($BOGOFILTER -QQ | grep ^wordlist | cut -f3 -d,)
  49.     fi
  50. fi
  51.  
  52. BOGOTEMP="bf_compact.$$"
  53.  
  54. mkdir "$BOGOTEMP" || {
  55.     echo "Cannot create directory $BOGOTEMP. Abort."
  56.     exit 1
  57. }
  58.  
  59. # copy Berkeley DB configuration if present
  60. if test -f "$BOGOHOME"/DB_CONFIG ; then
  61.     cp -p "$BOGOHOME"/DB_CONFIG "$BOGOTEMP"/
  62. fi
  63.  
  64. case "$($BOGOFILTER -V | grep Database:)" in
  65.     *"Berkeley DB"*)
  66.     # determine transactions
  67.     if test "$(find "$BOGOHOME/" -name "log.??????????" -print)" = "" ; then
  68.         TXN=no
  69.     else
  70.         TXN=yes
  71.     fi
  72.     ;;
  73.     *)
  74.     TXN=noarg
  75.     ;;
  76. esac
  77.  
  78. # reload files
  79. for FILE in $FILES ; do
  80.     NAME="$(basename $FILE)"
  81.     $BOGOUTIL --db-verify "$FILE" \
  82.     || { echo "$FILE corrupted, aborting." ; rm -r "$BOGOTEMP" ; exit 1 ; }
  83.     $BOGOUTIL -d "$FILE" | case $TXN in 
  84.     no|yes) $BOGOUTIL --db-transaction=no -l "$BOGOTEMP/$NAME" ;;
  85.     noarg)  $BOGOUTIL                     -l "$BOGOTEMP/$NAME" ;;
  86.     esac
  87. done
  88.  
  89. if [ $TXN = "yes" ] ; then
  90.     #create database environment files
  91.     $BOGOFILTER -e -C -d "$BOGOTEMP" --db-transaction=yes < /dev/null
  92. fi
  93.  
  94. # remove $BOGOHOME.old so we don't move the new backup *into* it
  95. # rather than renaming the backup to it.
  96. rm -rf "$BOGOHOME.old"
  97. mv "$BOGOHOME" "$BOGOHOME.old"
  98. mv "$BOGOTEMP" "$BOGOHOME"
  99.